package com.ruoyi.chat.service;

import com.ruoyi.chat.domain.ChatRecords;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
import reactor.core.publisher.Flux;

import java.util.List;
import java.util.Map;

/**
 * 聊天服务接口，基于LangChain4j实现
 *
 * @author WaKy
 * @version 1.0
 */
public interface ChatService {

    /**
     * 处理流式聊天请求
     *
     * @param question 用户问题
     * @return 聊天记录ID
     */
    Flux<String> streamChat(String question, Long memberId);

    /**
     * 处理带上下文的流式聊天请求
     *
     * @param question 用户问题
     * @param conversationId 会话ID
     * @param emitter 用于发送流式响应的SseEmitter对象
     */
    void streamChatWithContext(String question, Long conversationId, SseEmitter emitter);

    /**
     * 保存用户问题
     *
     * @param question 用户问题内容
     * @return 插入记录的主键ID
     */
    Long saveUserQuestion(String question);

    /**
     * 保存AI回复
     *
     * @param response AI回复内容
     * @param recordId 聊天记录ID
     */
    void saveAiResponse(String response, Long recordId);

    /**
     * 获取会话的聊天记录
     *
     * @param conversationId 会话ID
     * @return 聊天记录列表
     */
    List<ChatRecords> getConversationMessages(Long conversationId);

    /**
     * 分页获取会话的聊天记录
     *
     * @param conversationId 会话ID
     * @param pageNum 页码
     * @param pageSize 每页记录数
     * @param isDeleted 是否已删除(0-未删除,1-已删除)
     * @return 结果Map，包含列表和总数
     */
    Map<String, Object> getConversationMessagesPaged(Long conversationId, int pageNum, int pageSize, Integer isDeleted);

    /**
     * 删除单条聊天记录
     *
     * @param id 记录ID
     * @return 是否删除成功
     */
    boolean deleteMessage(Long id);

    /**
     * 恢复已删除的聊天记录
     *
     * @param id 记录ID
     * @return 是否恢复成功
     */
    boolean restoreMessage(Long id);
}
